import requests
import time

class ApiClient:
    def __init__(self, base_url, api_key):
        self.base_url = base_url
        self.api_key = api_key
        self.headers = {
            'Authorization': f'Bearer {self.api_key}',
            'Content-Type': 'application/json'
        }
        self.token = None
        self.token_expires_at = 0
        # 获取初始token
        self._refresh_token()
    
    def _refresh_token(self):
        # 模拟从绚星云平台获取Token
        # 实际实现中，这里应该调用真实的API获取Token
        self.token = f'token_{int(time.time())}'
        self.token_expires_at = time.time() + 20 * 60  # Token有效期20分钟
        self.headers['Authorization'] = f'Bearer {self.token}'
    
    def _ensure_token_valid(self):
        if time.time() >= self.token_expires_at:
            self._refresh_token()
    
    def get_voting_results(self):
        """获取投票结果数据"""
        self._ensure_token_valid()
        
        try:
            # 模拟API调用，实际应用中应该替换为真实的API请求
            # 由于无法实际调用绚星云平台，这里返回模拟数据
            return self._get_mock_voting_data()
        except Exception as e:
            print(f"API调用失败: {e}")
            # 返回模拟数据作为备用
            return self._get_mock_voting_data()
    
    def _get_mock_voting_data(self):
        """生成模拟投票数据"""
        # 模拟4轮投票数据
        mock_data = {
            '1': {
                '张三': 85,
                '李四': 90,
                '王五': 78,
                '赵六': 92,
                '钱七': 88,
                '孙八': 80
            },
            '2': {
                '周九': 87,
                '吴十': 91,
                '郑十一': 82,
                '王十二': 89,
                '李十三': 79,
                '赵十四': 84
            },
            '3': {
                '钱十五': 86,
                '孙十六': 93,
                '周十七': 81,
                '吴十八': 88,
                '郑十九': 77,
                '王二十': 90,
                '李二十一': 85
            },
            '4': {
                '张三': 85,
                '李四': 90,
                '王五': 78,
                '赵六': 92,
                '钱七': 88,
                '孙八': 80,
                '周九': 87,
                '吴十': 91,
                '郑十一': 82,
                '王十二': 89,
                '李十三': 79,
                '赵十四': 84,
                '钱十五': 86,
                '孙十六': 93,
                '周十七': 81,
                '吴十八': 88,
                '郑十九': 77,
                '王二十': 90,
                '李二十一': 85,
                '测试选手': 83
            }
        }
        
        # 添加一些随机波动，模拟实时更新
        import random
        for round_num, contestants in mock_data.items():
            for name in contestants:
                # 在原有分数基础上随机波动±2分
                mock_data[round_num][name] = max(0, min(100, contestants[name] + random.randint(-2, 2)))
        
        return mock_data